#include "utils.h"

void recupererDate(char* date)
{
	struct tm * t;
	time_t timestamp;
	char annee[5];
	char mois[3];
	char jour[3];
	char heure[3];
	char minute[3];
	char seconde[3];

	//récupération de la date et l'heure de lecture de la bal
	timestamp = time(NULL);
	t = localtime(&timestamp);

	sprintf(annee,"%d",(1900 + t->tm_year));

	if((1 + t->tm_mon)<10)
	{
		sprintf(mois,"0%d",(1 + t->tm_mon));
	}
	else{
		sprintf(mois,"%d",(1 + t->tm_mon));
	}

	if(t->tm_mday < 10)
	{
		sprintf(jour,"0%d",t->tm_mday);
	}
	else{
		sprintf(jour,"%d",t->tm_mday);
	}

	if(t->tm_hour < 10)
	{
		sprintf(heure,"0%d",t->tm_hour);
	}
	else{
		sprintf(heure,"%d",t->tm_hour);
	}

	if(t->tm_min < 10)
	{
		sprintf(minute,"0%d",t->tm_min);
	}
	else{
		sprintf(minute,"%d",t->tm_min);
	}

	if(t->tm_sec < 10)
	{
		sprintf(seconde,"0%d",t->tm_sec);
	}
	else{
		sprintf(seconde,"%d",t->tm_sec);
	}

	sprintf(date,"%s-%s-%s %s:%s:%s",annee,mois,jour,heure,minute,seconde);
}



//Fonctions de parsing
void EnvoyerInfosBal(char * infoParsee [], int idBalInfos)
{
	MsgInformation msgInfo;
	int ctrl;

	msgInfo.msgType = 1;
	strcpy(msgInfo.info.idCapteur,infoParsee[0]);
	printf("[ReceptionInfosProxy/EnvoyerInfosBal] ID Capteur : %s\n", msgInfo.info.idCapteur);
	strcpy(msgInfo.info.valeur,infoParsee[1]);
	printf("[ReceptionInfosProxy/EnvoyerInfosBal] Valeur : %s\n", msgInfo.info.valeur);

	recupererDate(msgInfo.info.date);

	ctrl = msgsnd(idBalInfos, &msgInfo, sizeof(msgInfo),0);
	if(ctrl != -1)
	{
		printf("[ReceptionInfosProxy/EnvoyerInfosBal] Message envoyé dans la Bal %i \n", idBalInfos);
	}
	else
	{
		printf("[ReceptionInfosProxy/EnvoyerInfosBal] Erreur d'envoi \n");
	}
}

void ParserCapteurMsgInfo(char * infoCapteurs [], int nbCapteurs, int idBalInfos)
{
	int i;
	int j;
	//tableau qui contiendra temporairement l'id et l'information pour un capteur lors du parsage
	//parse [0] contiendra l'id d'un capteur et parse [1] contiendra l'information mesurée
	char * parse [3];

	i=0;
	j=0;

	printf("[ParserCapteurMsgInfo] Nombre de capteurs : %i\n", nbCapteurs);
	while(i < nbCapteurs)
	{
		parse[j] = strtok (infoCapteurs[i],"$,-");
		while (parse[j] != NULL)
		{
			printf ("[ReceptionInfosProxy/ParserCapteurMsgInfo] %s\n",parse[j]);
			j++;
			//if(strcmp(parse[j]," ") == 0 || strcmp(parse[j],"\n") == 0 || strcmp(parse[j],"\r") == 0) return; //TODO : vérifier si ca marche
			parse[j] = strtok (NULL, "$,-");
		}
		//appel de la fonction qui envoie les données parsées dans la BAL
		printf("[ReceptionInfosProxy/ParserCapteurMsgInfo] Appel de EnvoyerInfosBal\n");
		EnvoyerInfosBal(parse, idBalInfos);
		i++;
		j=0;
	}
}

void ParserTrame(char * messageParser, int idBalInfos)
{
	//tableau de string qui va contenir les infos de chaque capteur parsée de la trame
	//ex:le parsage de 01$12.4%02$13.34 donne 01$12.4 dans tabCapteur[0] et 02$13.34 dans tabCapteur[1]
	char * tabCapteur[99];
	int i;

	i=0;
	printf("[ParserTrame] Message à parser : %s\n", messageParser);
	tabCapteur[i] = strtok (messageParser,"%,-,\n,\r");
	while (tabCapteur[i] != NULL && strcmp(tabCapteur[i], "\n")!=0 && strcmp(tabCapteur[i], "\r")!=0 && strcmp(tabCapteur[i], " ")!=0)
	{
		i++;
		tabCapteur[i] = strtok (NULL, "%,-,\n,\r");
	}
	//chaque string sera reparsée afin de récupérer l'id du capteur et l'information détectée
	ParserCapteurMsgInfo(tabCapteur, i, idBalInfos);
}

void logEvent(int idLog ,char * description)
{
	MYSQL *mysql;

	mysql = mysql_init(NULL);
	//printf("logEvent() Tentative de connexion à la BDD\n");

	//Connexion à la BDD
	if (mysql_real_connect(mysql, MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWD, MYSQL_DB, 0, NULL, 0) == NULL)
	{
		printf("logEvent() Erreur de connexion à la BDD : %s\n", mysql_error(mysql));
		mysql_close(mysql);
	}
	else if (mysql_select_db(mysql,MYSQL_DB) == 0) {

		//printf("logEvent() Connecté à la BDD!\n");

		char requeteBDD[200] = "INSERT INTO log(idTypeLog,description) VALUES (";
		sprintf(requeteBDD, "%s%i%s%s%s", requeteBDD, idLog, ",\"", description, "\");");
		if(mysql_query(mysql, requeteBDD))
		{
			perror("logEvent() Erreur requête\n");
		}
		mysql_close(mysql);
	}
}
